#pragma once
// The following ifdef block is the standard way of creating macros which make exporting 
// from a DLL simpler. All files within this DLL are compiled with the NAIVEAPPROACH_EXPORTS
// symbol defined on the command line. this symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see 
// NAIVEAPPROACH_API functions as being imported from a DLL, whereas this DLL sees symbols
// defined with this macro as being exported.
#define MYDLL_EXPORTS
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif
enum ETYPE
{
	IFile,
	IDir
};

class IDiskObj
{
public:
	virtual const char* GetName()=0;
	virtual ETYPE  GetType()=0;
};
class IFindResult
{
public:	
	virtual unsigned int GetCount()=0;   
	virtual void Release() =0;
	virtual IDiskObj* GetItemByIdx(unsigned int)=0;
};

class IFileProxy: 
	public IDiskObj
{
};

class IDirProxy:
	public IDiskObj
{
public:
	virtual IFindResult* Find(const char*,bool)=0;
};
class IVolumnProxy
{
public:
	virtual IDirProxy* GetRootDir()=0;;
};
class IVirtualDiskProxy
{
public:
	virtual int ExecCommand(const char* command)=0;
	virtual int GetVolumnCount()=0;
	virtual IVolumnProxy* GetVolumnByIdx(int)=0;
};